let http = require('http');
let url = require('url');
let util = require('util');
let config = require('../config');

/**
 * 服务器实现
 * @param route
 */
function start(route) {
    function onRequest(req, res) {
        //这里关注一下console的用法。以前只知道console.log这个方法，现在才知道console下的方法还有这么多
        // console.trace('啥东西');
        //__filename和__dirname是两个内置的全局对象。前者代表当前正在运行的文件名称，后者表示当前所在的文件夹
        // console.log(__filename);
        console.log(req.url);
        // let urlHuman = util.inspect(url.parse(req.url));
        let pathname = url.parse(req.url).pathname;
        route(pathname, req, res);
    }

    //http://nodejs.cn/api/process.html#process_warning_using_uncaughtexception_correctly
    // 如果打算使用 'uncaughtException' 事件作为异常处理的最后补救机制，这是非常粗糙的设计方式
    process.on('uncaughtException', function (err) {
        console.error(err);
    });
    http.createServer(function (req, res) {
        //使用try catch包裹，否则内部一旦发生错误，程序就退出了
        try {
            onRequest(req, res);
        } catch (e) {
            console.log(e);
            res.writeHead(500);
            res.end('Server Error');
        }
    }).listen(config.port);
}

exports.start = start;